# -*- coding: utf-8 -*-

import allure
from common.page import Page
from common.utils import Utils
from config.config import Config
from dz_service.page_elements.el_home import home
from dz_service.page_elements.el_permission_open import permission, risk, convertible_bond, reits
from dz_service.page_elements.el_common import common
from dz_service.function.fun_home import Home
from dz_service.function.fun_common import Common
from time import sleep


class Permission:

    @allure.step('step:重置柜台权限')
    def initial_uf_rights_sql(self, client_id):
        if Config().env == 'test':
            Utils.search_for_param('uf', 'sql/service_sql.json', 'initial_uf_rights_sql', [' ', client_id], '重置柜台权限')
        else:
            assert True

    def opening(self, module, page, element):
        els = Page.elements(module, page, element)
        for i in range(0, len(els)):
            Page.click(module, page, element, is_els=True, num=i)

    def agree(self, module, page, element):
        x = Page.element(module, page, element).get_attribute('class')
        while 'disabled' in x:
            Page.js_bottom()
            if 'disabled' not in x:
                break
            x = Page.element(module, page, element).get_attribute('class')
        Page.click(module, page, element)
        sleep(0.2)

    @allure.step('step:风险警示板权限开通')
    def risk_warning_open(self):
        # 点击首页--权限管理
        Home().click_permission()
        # 完整性检查页
        Page.click(permission, '交易权限管理', '风险警示板')
        try:
            Page.click(permission, '交易权限管理', '继续开通')
        except:
            pass
        assert len(Page.elements(risk, '风险警示板', '已满足')) == 3
        # 业务说明页
        Common().click_next()
        assert Page.element(risk, '风险警示板', '风险警示权限').text == "风险警示权限"
        # 准入性检查页
        Common().click_handle_now()
        assert len(Page.elements(risk, '风险警示板', '已满足')) == 4
        Common().click_next()
        # 沪A，深A开通
        self.opening(risk, '风险警示板', '可开通')
        Page.click(common, '公共页面', '立即开通')
        assert Page.element(risk, '风险警示板', '未签署').text == "未签署"
        # 协议签署
        Page.click(common, '签署协议', '点击签署')
        self.agree(common, '签署协议', '本人已知悉')
        self.agree(common, '签署协议', '本人已知悉')
        self.agree(common, '签署协议', '本人已知悉')
        assert Page.element(risk, '风险警示板', '办理成功').text == '办理成功'

    @allure.step('step:检查柜台风险警示权限')
    def check_risk_warning_open(self, client_id):
        if Config().env == 'test':
            search_result = Utils.search_for_param('uf', 'sql/service_sql.json', 'check_stockholders_rights',
                                                   [client_id], "检查柜台风险警示权限")
            Utils.check_val(' w', str(search_result['holder_rights']), "风险警示权限")
        else:
            assert True

    @allure.step('step:可转债权限开通')
    def convertible_bond_open(self):
        Page.click(home, '首页', '权限管理')
        Page.click(permission, '交易权限管理', '可转债')
        assert Page.element(convertible_bond, '可转债', '账户选择提示').text == '* 如需开通信用账户的权限，请选择普通账户与信用账户同时开通。'
        # 沪A，深A开通
        self.opening(convertible_bond, '可转债', '未开通')
        Page.click(common, '公共页面', '下一步')
        # 不适当警示书
        Page.click(common, '签署协议', '本人已知悉_old')
        self.agree(common, '签署协议', '确认/确定')
        Page.click(common, '签署协议', '本人已知悉_old')
        self.agree(common, '签署协议', '确认/确定')
        # 问卷调查
        assert Page.element(convertible_bond, '可转债', '问卷回访').text == '问卷回访（共6题）'
        for i in range(1, 10, 4):
            sleep(0.5)
            Page.click(common, '公共页面', '是', True, i)
            Page.click(common, '公共页面', '是', True, i + 2)
            Page.page_down()
        Page.click(common, '公共页面', '下一步')
        assert Page.element(convertible_bond, '可转债', '可转债权限已开通成功').text == '您的可转债权限已开通成功'

    @allure.step('step:基础设施基金权限开通')
    def infrastructure_fund_open(self):
        # 点击首页--权限管理
        Page.click(home, '首页', '权限管理')
        Page.click(permission, '交易权限管理', '基础设施基金')
        # 深A开通
        self.opening(reits, '基础设施基金', '未开通')
        Page.click(common, '公共页面', '下一步')
        # 不适当警示书
        Page.click(common, '签署协议', '本人已知悉_old')
        # Page.click(common, '签署协议', '本人已充分阅读')
        self.agree(common, '签署协议', '确认/确定')
        # 公开募集基础设施证券投资基金风险揭示书
        Page.click(common, '签署协议', '本人已知悉_old')
        # Page.click(common, '签署协议', '本人已充分阅读')
        self.agree(common, '签署协议', '确认/确定')
        assert Page.element(reits, '基础设施基金', '基础设施基金权限已开通成功').text == '您的基础设施基金权限已开通成功'

    @allure.step('step:检查柜台基础设施基金权限')
    def check_infrastructure_fund_open(self, client_id):
        if Config().env == 'test':
            search_result = Utils.search_for_param('uf', 'sql/service_sql.json', 'check_infrastructure_fund_open',
                                                   [client_id], "检查柜台基础设施基金权限")
            Utils.check_val(' }', str(search_result['holder_rights']), "基础设施基金权限")
        else:
            assert True
